Intro

Money diverted to political advertising has become a multi-million dollar business as technology has brought us high-speed internet and political organizations are able to form super PACs. Understanding where in the U.S. this money is focused can provide insight into what populations and regions of the country political candidates want to target. Google, to its credit, releases spending on political ads for its platform in a easily accessible manner, which makes this investigation much easier. Here I show U.S, state-level maps of spending on political ads since June 2018.


Data Prep

After downloading the data and performing some rudimentary cleaning, the data are ready to map. You can find all the code I used for this analysis on my github. The first map below shows absolute spending from June 2018-NA 2019. Clearly, California and Florida stand out as the top recipients of political ad dollars. However, there are some surprising states near the top as well, with Texas, Arizona, Missouri, and Tennessee all receiving more that 4 million dollars since June 2018.


U.S. Map

#Make map
ggplot() + 
  geom_sf(data=shape.data, aes(fill=spending), color="gray30") +
  scale_fill_viridis_c(labels=comma, name="USD") +
  ggtitle(paste0("Spending June 2018 to December 2019"))

However, this trend could be confounded by population. In order to get a perspective on how much any one person may encounter a google political ad by state, the map needs to be population-weighted. The map below shows spending after population adjustment. With spending over $1000 per 1000 people, Montana, North Dakota, and Nevada take the top spots-a result not too surprising considering these states have some of the smallest populations. Notably, this map reveals that Tennessee, Missouri, and Arizona rank high not only in absolute spending but in relative spending.

#read in 2018 population data
#dowloaded here: https://www2.census.gov/programs-surveys/popest/datasets/2010-2018/state/asrh/
pop <- fread("~/Desktop/website_dev/google_ads/data/us_pop.csv")[,.(NAME, POPESTIMATE2018, POPEST18PLUS2018)]
shape.data <- left_join(shape.data, pop, by=c("STATE_NAME"="NAME"))

#calculate pop-weighted spending
shape.data <- shape.data %>%
  mutate(pop_spending=(spending/POPEST18PLUS2018)*1000)

#Make map
ggplot() + 
  geom_sf(data=shape.data, aes(fill=pop_spending), color="gray30") +
  scale_fill_viridis_c(labels=comma, name="USD/1000 people") +
  ggtitle(paste0("Pop-weighted spending June 2018 to December 2019"))

Future posts will dive into the temporal distribution and political leanings of political ad spending.

 




A work by Will Godwin